﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Auditoria
{
    public partial class Principal : Form
    {
        Login fmlog;
        Conexion co;
        List<String> usuarios = new List<String>();
        List<String> tablespaces = new List<String>();
        List<String> tablas = new List<String>();
        List<String> Logs = new List<String>();
        public Principal(Conexion conexion)
        {
            InitializeComponent();
            this.co = conexion;
            this.CargarCombo();
        }
        private void CargarCombo()
        {
            usuarios = co.todos_Users();
            tablespaces = co.todos_tablespace();
            cargarUsuarios();
            cargarTablespaces();
            
        }
        public void setLogs(List<String> lo) {
            this.Logs = lo;
        }
        public void cargarUsuarios()
        {
            foreach (String valor in usuarios)
            {
                this.cmbUsuario.Items.Add(valor);
            }
        }
        public void cargarTablespaces()
        {
            foreach (String valor in tablespaces)
            {
                this.cmbTableSpace.Items.Add(valor);
            }
        }

        public void getLogin(Login log)
        {
            this.fmlog = log;
        }

        private void salirToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            this.Close();
            this.fmlog.Show();            
        }

        private void auditoriaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Permisos permiso = new Permisos(this.co);
            permiso.getPrincipal2(this);
            this.Hide();
            permiso.Show();
        }

        private void acercaDeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AcercaDe acerca = new AcercaDe();
            acerca.getPrincipal(this);
            this.Hide();
            acerca.Show();
        }

        private void Principal_Load(object sender, EventArgs e)
        {

        }

        private void btnConsultar_Click(object sender, EventArgs e)
        {
            if (this.cmbUsuario.SelectedIndex < 1 && this.cmbTablas.SelectedIndex > 0) 
            {
                String dato = this.cmbTablas.SelectedItem.ToString();
                cargarDatagrid(dato);
            }
            else if(this.cmbTablas.SelectedIndex < 1 && this.cmbUsuario.SelectedIndex > 0)
            {
                String dato = this.cmbUsuario.SelectedItem.ToString();
                cargarDatagrid(dato);
            }
            else
            {
                MessageBox.Show("ERROR debe de elegir un usuario o tabla");
                return;
            }
        }

        private void cargarDatagrid(String condicion){
             this.dataGridView1.DataSource = null;
            List<String> lista = new List<String>();
            lista = this.co.tablas_logminer("", condicion,Logs);
            DataTable dt = new DataTable();
            dt.Columns.Add("Fecha");
            dt.Columns.Add("Usuario");
            dt.Columns.Add("Tabla");
            dt.Columns.Add("Operación");
            dt.Columns.Add("SQL UNDO");
            dt.Columns.Add("SQL REDO");
            if (lista.Count == 1)
                return;
            for (int i = 1; i < lista.Count; i = i + 6) 
            {
                DataRow row = dt.NewRow();
                row["Fecha"] = lista[i];
                row["Usuario"] = lista[i+1];
                row["Tabla"] = lista[i+2];
                row["Operación"] = lista[i+3];
                row["SQL UNDO"] = lista[i+4];
                row["SQL REDO"] = lista[i+5];
                dt.Rows.Add(row);
            }
            this.dataGridView1.DataSource = dt;
            this.dataGridView1.Update();
        }

        private void cmbTableSpace_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!cmbTablas.Enabled)
                cmbTablas.Enabled = true;
            if (this.cmbTableSpace.SelectedIndex == 0)
            {
                this.cmbTablas.Items.Clear();
                this.tablas.Clear();
                
            }
            else
            {
               
                this.cmbTablas.Items.Clear();
                this.tablas.Clear();
                String tablespace_name = this.cmbTableSpace.SelectedItem.ToString();
                tablas = co.tablas_Por_Tablespace(tablespace_name);
                this.cargarTablas();
            }
        }
        public void cargarTablas()
        {
            foreach (String nuevo in tablas)
            {
                this.cmbTablas.Items.Add(nuevo);
            }
            this.cmbTablas.SelectedIndex = 0;
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Logs lo = new Logs(this.co);
            lo.getPrincipal2(this);
            this.Hide();
            lo.Show();
        }
    }
}
